home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2001 / MacHack 2001.toast / pc / Sessions / Traut / ZStrings / Source / CrossPlatform / ZString.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-06-23  |  5.3 KB  |  291 lines

  1. /*==================================================================
  2.     File:        ZString.h
  3.     
  4.     Contains:    Class for handling "z strings", a hieararchical
  5.                 dictionary of strings for cross-platform and
  6.                 localization purposes.
  7.  
  8.     Written by:    Eric Traut
  9.     
  10.     Copyright:    2000-2001 Connectix Corporation
  11.     
  12.     This source has been placed into the public domain by
  13.     Connectix Corporation. You have the right to modify, 
  14.     distribute or use this code without any legal limitations
  15.     or finanicial/licensing requirements. Connectix is not 
  16.     liable for any problems that result from the use of this 
  17.     code.
  18.     
  19.     If you have comments, feedback, questions, or would like
  20.     to submit bug fixes or updates to this code, please email
  21.     opensource@connectix.com.
  22. ==================================================================*/
  23.  
  24. #ifndef __ZSTRING__
  25. #define __ZSTRING__
  26.  
  27.  
  28. #include "ZStringData.h"
  29.  
  30. #include <string.h>
  31.  
  32. enum
  33. {
  34.     // We'll start the IDs at 128 because of the Mac platform,
  35.     // which defines resource numbers below 128 as "owned by
  36.     // the system".
  37.  
  38.     kEnglishOverrideID                        = 128,
  39.     kGermanOverrideID                        = 129,
  40.     kFrenchOverrideID                        = 130,
  41.     kJapaneseOverrideID                        = 131,
  42.     kItalianOverrideID                        = 132,
  43.     kSpanishOverrideID                        = 133,
  44.     kPortugueseOverrideID                    = 134
  45.     
  46.     // Add more languages as necessary...
  47. };
  48.  
  49.  
  50. /*==================================================================
  51.     ZString
  52. ==================================================================*/
  53.  
  54. class ZString
  55. {
  56.     public:
  57.         // Construction & Destruction
  58.         ZString()
  59.         {
  60.             mData = NULL;
  61.         }
  62.  
  63.         ZString(
  64.             ZString &            inString)
  65.         {
  66.             mData = inString.GetData();
  67.             if (mData != NULL)
  68.                 mData->IncrementRefCount();
  69.         }
  70.  
  71.         ZString(
  72.             const char *        inString);
  73.  
  74.         ~ZString()
  75.         {
  76.             ReleaseData();
  77.         }
  78.  
  79.         // Loading "named strings"
  80.         void
  81.         GetNamedString(
  82.             const char *        inNamedString,
  83.             Z_Boolean            inDataIsVolatile        = false);
  84.  
  85.         static ZString
  86.         GetNamedZString(
  87.             const char *        inNamedString,
  88.             Z_Boolean            inDataIsVolatile        = false);
  89.         
  90.         static void
  91.         PopulateDictionary(
  92.             const char *        inOverrideDict,
  93.             Z_Boolean            inDataIsVolatile        = false);
  94.  
  95.         // Accessing String Length
  96.         Z_UInt16
  97.         GetLength() const
  98.         {
  99.             if (mData == NULL)
  100.                 return 0;
  101.             else
  102.                 return (Z_UInt16)mData->GetLength();
  103.         }
  104.         
  105.         // Accessing String
  106.         const char *
  107.         GetCString() const
  108.         {
  109.             if (mData == NULL)
  110.                 return "";
  111.             else
  112.                 return mData->GetStringData();
  113.         }
  114.  
  115.         // Extracting String
  116.         Z_UInt16
  117.         GetCString(
  118.             char *                outString,
  119.             Z_UInt16            inBufferSize);
  120.         
  121.         Z_UInt8
  122.         GetPString(
  123.             Z_UInt8 *            outString,
  124.             Z_UInt16            inBufferSize = 256);
  125.  
  126.         ZString
  127.         GetSubstring(
  128.             Z_UInt16            inIndex,
  129.             char                inSeparator);
  130.  
  131.         // Setting the String
  132.         void
  133.         SetString(
  134.             const char *        inString,
  135.             Z_UInt16            inLength);
  136.         
  137.         void
  138.         SetCString(
  139.             const char *        inString);
  140.         
  141.         void
  142.         SetPString(
  143.             const Z_UInt8 *        inString);
  144.  
  145.         // Assigning String to New String
  146.         ZString
  147.         operator = (
  148.             ZString &             inString);
  149.  
  150.         ZString
  151.         operator = (
  152.             const char *        inString)
  153.         {
  154.             SetCString(inString);
  155.             
  156.             return *this;
  157.         }
  158.  
  159.         // Appending Strings
  160.         ZString &
  161.         operator += (
  162.             const ZString &        inString)
  163.         {
  164.             ConcatString(inString, inString.GetLength());
  165.             return *this;
  166.         }
  167.  
  168.         ZString &
  169.         operator += (
  170.             char                inChar)
  171.         {
  172.             ConcatString(&inChar, 1);
  173.             return *this;
  174.         }
  175.  
  176.         ZString &
  177.         operator += (
  178.             const char *        inString)
  179.         {
  180.             ConcatString(inString, strlen(inString));
  181.             return *this;
  182.         }
  183.             
  184.         ZString
  185.         operator + (
  186.             const ZString &        inString)
  187.         {
  188.             ZString newString;
  189.             newString.ConcatStrings(GetCString(), GetLength(), inString.GetCString(), inString.GetLength());
  190.             return newString;
  191.         }
  192.         
  193.         friend ZString
  194.         operator + (
  195.             const ZString &        inStringA,
  196.             const char *        inStringB)
  197.         {
  198.             ZString newString;
  199.             newString.ConcatStrings(inStringA, inStringA.GetLength(), inStringB, strlen(inStringB));
  200.             return newString;
  201.         }
  202.         
  203.         friend ZString
  204.         operator + (
  205.             const char *        inStringA,
  206.             ZString &            inStringB)
  207.         {
  208.             ZString newString;
  209.             newString.ConcatStrings(inStringA, strlen(inStringA), inStringB, inStringB.GetLength());
  210.             return newString;
  211.         }
  212.         
  213.         friend ZString
  214.         operator + (
  215.             ZString &            inStringA,
  216.             ZString &            inStringB)
  217.         {
  218.             ZString newString;
  219.             newString.ConcatStrings(inStringA, inStringB.GetLength(), inStringB, inStringB.GetLength());
  220.             return newString;
  221.         }
  222.         
  223.         // Replacing Substrings
  224.         ZString
  225.         ReplaceParameter(
  226.             Z_UInt8                inParamNum,
  227.             const char *        inString);
  228.  
  229.         ZString
  230.         ReplaceParameter(
  231.             Z_UInt8                inParamNum,
  232.             Z_SInt32            inNumber);
  233.         
  234.         // Casting
  235.         operator const char *() const
  236.         {
  237.             return GetCString();
  238.         }
  239.         
  240.         // Low-level Manipulation
  241.         ZStringData *
  242.         GetData()
  243.         {
  244.             return mData;
  245.         }
  246.         
  247.         void
  248.         AllocateData(
  249.             Z_UInt32            inStringLength);
  250.  
  251.         void
  252.         ReleaseData()
  253.         {
  254.             if (mData != NULL)
  255.             {
  256.                 mData->DecrementRefCount();
  257.                 mData = NULL;
  258.             }
  259.         }
  260.         
  261.     private:
  262.         void
  263.         FillInString(
  264.             const char *        inString,
  265.             Z_UInt16            inOffset,
  266.             Z_UInt16            inLength)
  267.         {
  268.             if (mData != NULL)
  269.                 mData->FillInString(inString, inOffset, inLength);
  270.         }
  271.         
  272.         void
  273.         ConcatStrings(
  274.             const char *        inStringA,
  275.             Z_UInt16            inStringALen,
  276.             const char *        inStringB,
  277.             Z_UInt16            inStringBLen);
  278.         
  279.         void
  280.         ConcatString(
  281.             const char *        inString,
  282.             Z_UInt16            inStringLen);
  283.         
  284.         ZStringData *            mData;
  285. };
  286.  
  287.  
  288. #endif // __ZSTRING__
  289.  
  290.  
  291.